package com.peng.immodule.entity;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by M_genius on 2018/3/6 11:50.
 * 描述：
 *      该类表示联系人，只有 userName、nick，实现了 Parcelable 接口
 *
 * 1、序列化：将对象转换为可以传输的二进制流(二进制序列)的过程
 * 2、Parcelable 相对于 Serializable 的使用相对复杂一些,但 Parcelable 的效率相对 Serializable 也高很多
 * 3、通过 Parcel 写入和恢复数据的
 */

public class Contact implements Parcelable {

    public String username;
    public String nick;

    protected Contact(Parcel in) {
        username = in.readString();
        nick = in.readString();
    }

    protected Contact() {
    }

    public Contact(String username) {
        this.username = username;
    }

    public String toString() {
        return "<contact , username:" + this.username + ">";
    }

    /**
     * 必须要有一个非空的静态变量 CREATOR
     * 通过匿名内部类实现 Parcelable 中的 Creator 的接口，实现反序列化
     */
    public static final Creator<Contact> CREATOR = new Creator<Contact>() {
        @Override
        public Contact createFromParcel(Parcel in) {
            return new Contact(in);
        }

        @Override
        public Contact[] newArray(int size) {
            return new Contact[size];
        }
    };

    /**
     * 只针对一些特殊的、需要描述信息的对象,需要返回1,其他情况返回0就可以
     *
     * @return
     */
    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * 通过 writeToParcel 方法实现序列化
     *
     * @param dest
     * @param flags
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(username);
        dest.writeString(nick);
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 如果Nick为空，则返回 userName
     * @return
     */
    public String getNick() {
        return nick == null ? this.getUsername() : this.nick;
    }

    public void setNick(String nick) {
        this.nick = nick;
    }
}
